home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / PROLOG / BP330 / !BinPro330 / progs / color < prev    next >
Text File  |  1995-02-06  |  4KB  |  147 lines

  1. /* Originally written by Neng-Fa Zhou, zhou@orchid.mse.kyutech.ac.jp  */
  2. /* Optimized (made about 100 times faster :-)) for BinProlog by Paul Tarau */
  3.  
  4.  
  5. go :-
  6.     statistics(runtime,_),
  7.     regions(Rs,Dict),
  8.     solve(Rs,Dict),
  9.     statistics(runtime,[_,T]),
  10.     write('execution time is '),write(T), write(' milliseconds'),nl,
  11.     write(Dict),nl.
  12.  
  13. regions(Rs,Dict):-
  14.   findall(R,neighbors(R,_),Rs),
  15.   length(Rs,N),
  16.   functor(Dict,colors,N).
  17.  
  18. solve([],_).
  19. solve([R|Rs],Dict):-
  20.    arg(R,Dict,C),
  21.    color(C),
  22.    \+ inconsistent(R,C,Dict),
  23.    solve(Rs,Dict).
  24.  
  25. inconsistent(R,C,Dict):-
  26.    neighbors(R,Rs),
  27.    lmember(Rs,Dict,C).
  28.  
  29. color(red).
  30. color(blue).
  31. color(black).
  32. color(yellow).
  33.  
  34. lmember([X|_],Dict,C):-arg(X,Dict,C).
  35. lmember([_|Xs],Dict,C):-lmember(Xs,Dict,C).
  36.  
  37. neighbors(1,[]).
  38. neighbors(2,[1]).
  39. neighbors(3,[1,2]).
  40. neighbors(4,[1,3]).
  41. neighbors(5,[1,4]).
  42. neighbors(6,[1,5]).
  43. neighbors(7,[1,6]).
  44. neighbors(8,[1,7]).
  45. neighbors(9,[1,8]).
  46. neighbors(10,[1,9]).
  47. neighbors(11,[1,10]).
  48. neighbors(12,[2,3]).
  49. neighbors(13,[3,4,12]).
  50. neighbors(14,[4,5,13]).
  51. neighbors(15,[5,6,14]).
  52. neighbors(16,[6,7,15]).
  53. neighbors(17,[7,8,16]).
  54. neighbors(18,[8,9,17]).
  55. neighbors(19,[9,10,18]).
  56. neighbors(20,[1,10,11,19]).
  57. neighbors(21,[12,13]).
  58. neighbors(22,[13,14,21]).
  59. neighbors(23,[14,15,22]).
  60. neighbors(24,[15,16,23]).
  61. neighbors(25,[16,17,24]).
  62. neighbors(26,[17,18,25]).
  63. neighbors(27,[18,19,26]).
  64. neighbors(28,[19,20,27]).
  65. neighbors(29,[21,22]).
  66. neighbors(30,[22,23,29]).
  67. neighbors(31,[23,24,30]).
  68. neighbors(32,[24,25,31]).
  69. neighbors(33,[25,26,32]).
  70. neighbors(34,[26,27,33]).
  71. neighbors(35,[27,28,34]).
  72. neighbors(36,[29,30]).
  73. neighbors(37,[30,31,36]).
  74. neighbors(38,[31,32,37]).
  75. neighbors(39,[32,33,38]).
  76. neighbors(40,[33,34,39]).
  77. neighbors(41,[34,35,40]).
  78. neighbors(42,[36,37]).
  79. neighbors(43,[37,38,42]).
  80. neighbors(44,[38,39,43]).
  81. neighbors(45,[39,40,44]).
  82. neighbors(46,[40,41,45]).
  83. neighbors(47,[42,43]).
  84. neighbors(48,[43,44,47]).
  85. neighbors(49,[44,45,48]).
  86. neighbors(50,[45,46,49]).
  87. neighbors(51,[47,48]).
  88. neighbors(52,[48,49,51]).
  89. neighbors(53,[49,50,52]).
  90. neighbors(54,[51,52]).
  91. neighbors(55,[52,53,54]).
  92. neighbors(56,[54,55]).
  93. neighbors(57,[2,12]).
  94. neighbors(58,[12,21,57]).
  95. neighbors(59,[21,29,58]).
  96. neighbors(60,[29,36,59]).
  97. neighbors(61,[36,42,60]).
  98. neighbors(62,[42,47,61]).
  99. neighbors(63,[47,51,62]).
  100. neighbors(64,[51,54,63]).
  101. neighbors(65,[54,56,64]).
  102. neighbors(66,[55,56,65]).
  103. neighbors(67,[53,55,66]).
  104. neighbors(68,[50,53,67]).
  105. neighbors(69,[46,50,68]).
  106. neighbors(70,[41,46,69]).
  107. neighbors(71,[35,41,70]).
  108. neighbors(72,[28,35,71]).
  109. neighbors(73,[1,20,28,72]).
  110. neighbors(74,[64,65,66,67]).
  111. neighbors(75,[63,64,74]).
  112. neighbors(76,[67,68,74,75]).
  113. neighbors(77,[62,63,75]).
  114. neighbors(78,[75,76,77]).
  115. neighbors(79,[68,69,76,78]).
  116. neighbors(80,[61,62,77]).
  117. neighbors(81,[77,78,80]).
  118. neighbors(82,[78,79,81]).
  119. neighbors(83,[69,70,79,82]).
  120. neighbors(84,[60,61,80]).
  121. neighbors(85,[80,81,84]).
  122. neighbors(86,[81,82,85]).
  123. neighbors(87,[82,83,86]).
  124. neighbors(88,[70,71,83,87]).
  125. neighbors(89,[59,60,84]).
  126. neighbors(90,[84,85,89]).
  127. neighbors(91,[85,86,90]).
  128. neighbors(92,[86,87,91]).
  129. neighbors(93,[87,88,92]).
  130. neighbors(94,[71,72,88,93]).
  131. neighbors(95,[58,59,89]).
  132. neighbors(96,[89,90,95]).
  133. neighbors(97,[90,91,96]).
  134. neighbors(98,[91,92,97]).
  135. neighbors(99,[92,93,98]).
  136. neighbors(100,[93,94,99]).
  137. neighbors(101,[72,73,94,100]).
  138. neighbors(102,[2,57,58,95]).
  139. neighbors(103,[2,95,96,102]).
  140. neighbors(104,[2,96,97,103]).
  141. neighbors(105,[2,97,98,104]).
  142. neighbors(106,[2,98,99,105]).
  143. neighbors(107,[99,100,106]).
  144. neighbors(108,[100,101,107]).
  145. neighbors(109,[1,73,101,108]).
  146. neighbors(110,[1,2,106,107,108,109]).
  147.